// 浏览器中的全局对象 window
// 服务端可以直接访问global





const path = require('path');
console.log(path.basename(__dirname)); //02.Node概念
console.log(path.basename('a.min.js','.js')) // a.min

console.log(path.dirname(__filename)); // 取父路径的 /Users/adminx/Desktop/Ikki-study/node_advanced/01.node-basic/02.Node概念

console.log(path.extname('a.min.js')); // 取扩展名,都是从最后一个.开始获取 .js

// console.log(path.join(__dirname,'a','b','c','/')); // 拼接路径的 ...../a/b/c/  
// console.log(path.resolve(__dirname,'a','b','c','/')); // 解析出绝对路,也具备拼接的功能 /

// 

// 以后读取文件操作路径 尽量采用绝对路径

// let r = fs.readFileSync('./note.md','utf8'); // 用相对路径 会由于执行的路径发生变化导致问题
// console.log(r);

// 如何将一个字符串执行？ 
// eval  会引用上级作用域的变量   适合简单的js执行  不依赖上下文变量
// new Function （） 会创造一个和全局平级的执行环境  也会引用上级变量,拿不到局部变量
// runInThisContext

// var x = 10
// function fn(){
//     var x = 20
//     return new Function('return x;')
// }
// fn()() //10
 

// const vm = require('vm'); // 虚拟机模块  a b 两个模块没有关系
// var a = 100; // 没有window
// vm.runInThisContext('console.log(a)');  // a is not defined 实现一个 安全的执行，
// global.b = 200
// vm.runInThisContext('console.log(b)') //200   但是挂载全局上已经可以获取到
//  runInThisContext 是  我期望执行代码的时候 在一个干净的环境下执行代码 而不依赖当前的上下文

// 常用api
// fs.readFileSync fs.existsSync
// path.resolve path.join path.extname path.basename

